/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
**   * Redistributions of source code must retain the above copyright
**     notice, this list of conditions and the following disclaimer.
**   * Redistributions in binary form must reproduce the above copyright
**     notice, this list of conditions and the following disclaimer in
**     the documentation and/or other materials provided with the
**     distribution.
**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
**     the names of its contributors may be used to endorse or promote
**     products derived from this software without specific prior written
**     permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/

#ifndef PhotoEditViewItem_H
#define PhotoEditViewItem_H

#include <QGraphicsItem>
#include <QRectF>
#include <QSizeF>
#include <QImage>
#include <QPixmap>
#include <QString>
#include <QPoint>
#include "pfpaper.h"

/**********************************************************************************/
#define NORM_LINE 1
#define SHADOW_OFFSET 3.5
#define SHADOW_BLUR   10.0
#define MOUSEMV_THRES 5

enum HorAlignment{HorLeftAlig, HorCenterAlig, HorRightAlig};
enum VerAlignment{VerTopAlig, VerCenterAlig, VerBottomAlig};
/**********************************************************************************/

class PhotoFrame;
class PFPhotoEditViewItem: public QGraphicsItem
{
public:
        PFPhotoEditViewItem(bool print_item, PhotoFrame *pMainFrame, QGraphicsItem* parent = 0);
        ~PFPhotoEditViewItem();

        void setPageItm(PmPageItm *pageitm){_pageitm = pageitm;}
        PmPageItm* getPageItm(){return _pageitm;}

        void setFrame(const QString& framepath);
        void setBGPic(const QString& picpath);

		void getScaledPhotoSize(QSizeF &photosize);
		void savePhotoCenter(QPointF &photocenter);
		void restorePhotoCenter(const QPointF photocenter);
        void scale(qreal ratio);
        void rotate(int angel);

        void setShadow(bool s);
        bool getItemShadow(){ return item_shadow; }

        void resize(const QRectF& rect);
        void reload();
public:
        virtual void paint(QPainter *painter,
                            const QStyleOptionGraphicsItem *option,
                            QWidget *widget);
        virtual QRectF boundingRect() const;
        virtual QPainterPath shape() const;
        void mousePressEvent(QGraphicsSceneMouseEvent *event);
        void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
        void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
        void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
        void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
        void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);

private:
        void calculate_img(bool recal_lt=true);
        void getLefttop();
        void setLefttop();
        void load_img(const QString& filepath, QImage* image);
private:
        QSizeF item_size;
        bool item_shadow;

        PhotoFrame *_pMainFrame;
        QImage frame;
        QImage bgPic;
        QImage bgPic_bak;
        QImage resultImg;

        bool b_leftbtndown;
        QPointF lefttop_pnt;
        qreal _defscal;

        bool print_view_item;
        PmPageItm *_pageitm;
};

#endif
